/**  
 * @Title:  ConnectTest.java   
 * @Package com.jdbc.test01   
 * @Description:    TODO(用一句话描述该文件做什么)   
 * @author: WuKangrong     
 * @date:   2018年8月23日 下午3:32:41   
 * @version V
 * @JDKversion:1.8.0
 * @Copyright: 2018  
*/
package com.jdbc.test01;

import java.sql.*;

/**   
 * @ClassName:  ConnectTest   
 * @Description:TODO(这里用一句话描述这个类的作用)   
 * @author: WuKangrong 
 * @date:   2018年8月23日 下午3:32:41     
 * @Copyright: 2018 
 */
public class ConnectTest {

	/**   
	 * @Title: main   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param args      
	 * @return: void      
	 * @throws   
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		test01();
	}
	private static void test01() {
		try {
			// (1) 注册加载数据库驱动
			// 数据库驱动主类的包路径名，使用反射加载
			String strDirverName = "oracle.jdbc.OracleDriver";
			Class.forName(strDirverName);
			// (2) 获取数据库连接对象
			// 数据库连接各个属性
			// url连接串
			// 解析连接串：@前面固定写法；@后面是数据库服务器的ip地址或主机名；
			// 1521 数据库服务器监听的端口号；orcl：数据库名数据实例名
			String url = "jdbc:oracle:thin:@localhost:1521:orcl";
			// 用户名
			String name = "hr";
			// 密码
			String psw = "hr";
			// 从驱动管理类中获取指定参数的数据库连接对象
			Connection conn = DriverManager.getConnection(url,name,psw);
			// (3) 获取statement执行器，执行sql语句
			Statement st = conn.createStatement();
			// (4) 获取statement执行结果集resultset，并解析
			// sql语句
			String strSql = "SELECT e.employee_id,e.first_name,e.salary FROM employees e";
			// 执行查询操作
			ResultSet rs = st.executeQuery(strSql);
			// 解析结果集rs对象
			// next作用是类似于游标的作用，判定有没有下一行数据记录，如果有，则将游标向下移动一行，并返回判定结果true或false
			while (rs.next()) {
				// 取出当前游标中的数据记录
				System.out.println("员工ID：" + rs.getObject(1) + ";员工名：" + rs.getObject(2) + ";员工工资："  + rs.getObject(2));
			}

			// (5) 关闭资源 注意在没有操作完resultset之前不要关闭连接资源，因为已关闭资源就无法获取数据了；
			// 也就是说，解析resultset需要保持数据库连接
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


}
